<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <title>API - FreezeMessenger Documentation</title>
    <meta charset="utf-8" />
    <meta name="author" content="Joseph T. Parsons" />
    <link rel="stylesheet" type="text/css" href="styles.css" />
  </head>

  <body>
    <section>
      <header>
        <h1>Application Programming Interface</h1>
      </header>
      <nav>
        <ul>
          <li>Introduction</li>
          <ul>
            <li>Reading the Documentation</li>
            <li>Future Planning</li>
            <li>Standard Directives</li>
          </ul>
          <li>Establishing a Login (validate.php)</li>
          <ul>
            <li>Directives</li>
            <li>XML Tree</li>
          </ul>
          <li>Getting Posts (~/api/getMessages.php)</li>
          <ul>
            <li>Directives</li>
            <li>XML Tree</li>
          </ul>
          <li>Sending a Message (~/api/sendMessage.php)</li>
          <ul>
            <li>Directives</li>
            <li>XML Tree</li>
          </ul>
          <li>Getting the Active Users (~/api/getActiveUsers.php)</li>
          <ul>
            <li>Directives</li>
            <li>XML Tree</li>
          </ul>
          <li>Get Rooms (~/api/getRooms.php)</li>
          <ul>
            <li>Directives</li>
            <li>XML Tree</li>
          </ul>
          <li>“Who’s Online”  (~/api/getAllActiveUsers.php)</li>
          <ul>
            <li>Directives</li>
            <li>XML Tree</li>
          </ul>
          <li>Room Info (~/api/getUserInfo.php)</li>
          <li>User Info (~/api/getRoomInfo.php)</li>
          <li>Get Groups (~/api/getGroups.php)</li>
          <li>Get Kicks (~/api/getKicks.php)</li>
          <li>Get Server Status (~/api/getServerStatus.php)</li>
          <li>Get Stats (~/api/getStats.php)</li>
          <li>Moderate (~/api/moderate.php)</li>
          <li>Set Status (~/api/setStatus.php)</li>
          <li>Upload File (~/api/moderate.php)</li>
        </ul>
      </nav>

      <section>
        <h2>Introduction</h2>
        <p>The FIM Application Programming Interface, or API, is designed for easy Client-to-Server communication with the FreezeMessenger Server Backend. It is not, nor should it be confused with, a proper Instant Messenger Protocol, which exchanges information through a network in its own unique transport. In reality, the FIM API is merely a pipe through the Hypertext Transfer Protocol, or HTTP (and if supported by the server HTTPS), and should for the most part be treated as such.</p>

        <p>In general, all communications made through the HTTP will attempt to conform as well as possible to the RESTful standards, however there are some shortcommings. The PUT and DELETE methods are not used, due to lackluster browser support that was a must, and instead POST will be the sole method for all destructive queries, and GET for all nondestructive queries.</p>

        <p>The overwhelming goal of the API is to provide as comprehensive as possible access to all backend features of FreezeMessenger, ranging from getting messages to uploading files. It is not perfect, will likely change time-to-time in the future, and unfortunately may not be able to do everything one would in an ideal world want. However, server backends are able to implement comprehensives plugins into the API to extend its functionality to a much greater degree. Outside of this, by default no support exists for performing administrative tasks in the API; these will instead need to be implemented by first- and third-party interfaces.</p>

        <p>The choice of XML as the default format for the API comes from its human readability, unmatched extensibility, and support for complex data structures. However, the entire API is also available in the JSON format (and in theory in other third-party created formats) that may be easier to use on certain platorms. It is, however, less tested and may have slightly more bugs as a result of different poorly placed assumptions on the part of the API developers.</p>

        <p>The XML and JSON APIs are not fully of tricks, but know that the XML variation conforms solely to the XML 1.0 specification with the text/xml content-type. Both APIs solely rely on Unicode (UTF-8), and will express formatted data using (to the greatest extent possible) XHTML 5-compliant code.</p>

        <p>Finally, the entirety of this documentation is official and offered by the API’s developers, but at this time is still in early work in progress (as the API itself is). It is subject to change at any time, and as such it is recommended that XML data is parsed such that the order of sister nodes and parameters do not matter (as they shouldn’t in any standards parser), that unknown nodes and parameters are allowed, and that in the case of a missing node the client application is able to ignore it whenever reasonable.</p>

        <p>The author retains all copyrights of the document text, diagrams, and related content. This documentation may not be reproduced, transmitted, or sold without express written consent of the author at the present time. Write to <a href="mailto:rehtaew@gmail.com">rehtaew [at] gmail.com</a>.</p>

        <section>
          <h3>Reading the Documentation</h3>
          <p>Each command, starting with “Establishing a Login”, lists its script location in parenthesis after the title, its directives in a separate heading entitled “Directives”, and its data tree under “Structured Data Tree”. Examples are generally not given.</p>
          <p>All requests must be made using a valid login. In future versions of the API (starting with version 4), all requests made without a login will automatically fail. As of now, requests should only be made without a valid session hash if the user is anonymous (though they will still not be granted any POST priviledges).</p>
        </section>

        <section>
          <h3>Standard Directives</h3>
          <p>The following standard directives can be used in some or all of the pages, and may be required:</p>
          <ul class="directives">
            <li>Session Hash (fim3_sessionHash) - Obtained in “Establishing a Login”, this is a temporary string which corresponds to a particular login. It <strong>MUST</strong> be specified for all requests made by a client.</li>
            <li>User ID (fim3_userId) - The corrosponding user for the session hash. It is required for a valid session.</li>
            <li>Format (fim3_format) - The API format to return the structured data in. “xml” is default, with “json” and “phparray” also options (though the latter is solely for the purpose of understanding the internal structure).</li>
            <ul>
              <li>xml - Requests will be output using the Extensible Markup Language.</li>
              <li>json - Requests will be output using the Javascript Object Notation. This means a smaller transfer.</li>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Establishing a Login (validate.php)</h2>

        <section>
        <h3>Notes</h3>
        <ul>
          <li>The login script is separate from the main API because it is a are part of the core system.</li>
          <li>Note: Any request with a referrer that of the domain specified in config.php will run via the normal login process. Requests whose origins can not be identified as such will be required to specify a valid session token.<br /><br />

This behavior can change depending on the administrator’s preferences, however.</li>
        </ul>
        </section>

        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>username - The username of the user.</li>
            <li>password - The password of the user using the proper specified encryption.</li>
            <li>passwordEncrypt - The encryption used on the password.</li>
            <ul>
              <li>base64 - The plaintext password is Base64 encoded. This is beneficial to not have to escape complex data.</li>
              <li>md5 (recommended) - The plaintext password is encoded as MD5. Recommended for secure implementations.</li>
              <li>plaintext - The password as-is.</li>
            </ul>
            <li>apiVersion - The version of the API, removing any “0” subversions. For instance, the present version, “3.0.0” is “2”, while “3.0.1” would be “3.0.1” and “3.5.0” would be “3.5”. This can be comma seperated, with each item being a version that is known to work.<br /><br />

            Note: Because subversions will never move or remove elements, you will only need to specify the lowest version supported in a major version. That is, “3” will be accepted if the server is running “3.0.1” or “3.5” but need “3.0.1” if the client is running 3.0.0.</li>
            <li>requiredPlugins - If an application requires a plugin to be installed, list these in comma-seperated notation.</li>
          </ul>
        </section>

        <section>
          <h3>Data Tree</h3>
          <ul>
            <li>login</li>
            <ul>
              <li>sentData</li>
              <ul>
                <li>apiVersion</li>
                <li>passwordEncrypt</li>
                <li>userName</li>
                <li>password</li>
              </ul>
              <li>valid</li>
              <li>loginFlag</li>
              <li>loginText</li>
              <li>sessionHash</li>
              <li>userData</li>
              <ul>
                <li>userName</li>
                <li>userId</li>
                <li>userGroup</li>
                <li>avatar</li>
                <li>profile</li>
                <li>socialGroups</li>
                <li>startTag</li>
                <li>endTag</li>
                <li>defaultFormatting</li>
                <ul>
                  <li>color</li>
                  <li>highlight</li>
                  <li>fontface</li>
                  <li>general</li>
                </ul>
              </ul>
              <li>userPermissions</li>
              <ul>
                <li>allowed</li>
                <li>createRooms</li>
              </ul>
              <li>userOptions</li>
              <ul>
                <li>disableFormatting</li>
                <li>disableVideos</li>
                <li>disableImages</li>
                <li>reversePostOrder</li>
                <li>showAvatars</li>
                <li>audioDing</li>
              </ul>
              <li>adminPermissions</li>
              <ul>
                <li>modPrivs</li>
                <li>modCore</li>
                <li>modUsers</li>
                <li>modImages</li>
                <li>modCensorWords</li>
                <li>modCensorLists</li>
                <li>modPlugins</li>
                <li>modTemplates</li>
                <li>modHooks</li>
                <li>modTranslations</li>
              </ul>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Getting Posts (~/api/getMessages.php)</h2>
        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>rooms - A comma seperated list of rooms. Can be a single room in integer format. Some predefined constants can also be used.</li>
            <li>allPublic - Retrieves posts from all non-private IM rooms which the user is granted permission to acces.</li>
            <li>allPrivate - Retrieves posts from all private IM rooms which the user is a part of.<br /><br />

            Note: Using more than one room can conflict or even break the script’s execution should the watchRooms or activeUsers flags be set to true.</li>

            <li>messageLimit - The maximum number of posts to receive, defaulting to the internal limit of (in most cases) 40. Specifying 0 removes any limit.</li>

            <li>Note: A hardcoded maximum of 500 is in place to prevent any potential issues. This will in the future be changable by the administrator.</li>

            <li>messageDateMin, messageDateMax - The earliest post could have been made and the latest respectively. Use of newestDate only makes sense with no messageLimit. Do not specify to prevent checking.</li>

            <li>messageIdMin, messageIdMax - All posts must be after this ID or before this ID respectively. Use of newestMessage only makes sense with no messageLimit. Do not specify to prevent checking.</li>

            <li>messageIdStart - When specified WITHOUT the above two directives, messageIdStart will return all posts from this ID to this ID plus the messageLimit directive. This is strongly encouraged for all requests to the cache, e.g. for normal instant messenging sessions.</li>

            <li>noping - Disables ping; useful for archive viewing.</li>

            <li>watchRooms - Get unread messages from a user’s list of watchRooms (also applies to private IMs).</li>

            <li>activeUsers - Returns a list of activeUsers in the room(s) if specified. This is identical to calling the getActiveUsers script, except with less data redundancy.</li>
          </ul>
        </section>

        <section>
          <h3>Data Tree</h3>
          <ul>
            <li>getMessages</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
                <li>rooms</li>
                <li>roomsList</li>
                  <ul>
                </ul>
                <li>newestMessage</li>
                <li>oldestMessage</li>
                <li>newestDate</li>
                <li>oldestDate</li>
                <li>messageLimit</li>
              </ul>
              <li>errorStr</li>
              <li>errorDesc</li>
              <li>messages</li>
                <ul>
                <li>message</li>
                  <ul>
                  <li>roomData</li>
                    <ul>
                    <li>roomId</li>
                    <li>roomName</li>
                    <li>roomTopic</li>
                  </ul>
                  <li>messageData</li>
                    <ul>
                    <li>messageId</li>
                    <li>messageTime</li>
                    <li>messageTimeFormatted</li>
                    <li>messageText</li>
                      <ul>
                      <li>apiText</li>
                      <li>htmlText</li>
                    </ul>
                    <li>flags</li>
                  </ul>
                  <li>userData</li>
                    <ul>
                    <li>userName</li>
                    <li>userId</li>
                    <li>userGroup</li>
                    <li>avatar</li>
                    <li>socialGroups</li>
                    <li>startTag</li>
                    <li>endTag</li>
                    <li>defaultFormatting</li>
                      <ul>
                      <li>color</li>
                      <li>highlight</li>
                      <li>fontface</li>
                      <li>general</li>
                    </ul>
                  </ul>
                </ul>
              </ul>
              <li>watchRooms</li>
              <ul>
                <li>roomId</li>
                <li>roomName</li>
                <li>lastMessageTime</li>
              </ul>
              <li>activeUsers</li>
              <ul>
                <li>userId</li>
                <li>userName</li>
                <li>userGroup</li>
                <li>socialGroups</li>
                <li>startTag</li>
                <li>endTag</li>
              </ul>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Sending a Message (~/api/sendMessage.php)</h2>
        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>roomId - The room ID.</li>
            <li>message - The message text, properly URLencoded.</li>
          </ul>
        </section>
        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>sendMessage</li>
            <ul>
              <li>activeUser</li>
              <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
              <ul>
                <li>roomId</li>
                <li>message</li>
              </ul>
              <li>errorStr</li>
              <li>errortext</li>
              <li>censor</li>
              <ul>
                <li>word</li>
                <li>severity</li>
                <li>reason</li>
              </ul>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Getting the Active Users of a Single Room (~/api/getActiveUsers.php)</h2>
        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>rooms - The rooms to query.</li>
            <li>onlineThreshold - The period of time after which a user is no longer “active”.</li>
          </ul>
        </section>
        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>getActiveUsers</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
                <li>rooms</li>
                <li>roomsList</li>
                  <ul>
                  <li>room</li>
                </ul>
                <li>onlineThreshold</li>
                <li>time</li>
              </ul>
              <li>errorStr</li>
              <li>errorDesc</li>
              <li>rooms</li>
                <ul>
                <li>room</li>
                  <ul>
                  <li>roomData</li>
                    <ul>
                    <li>roomId</li>
                    <li>roomName</li>
                    <li>roomTopic</li>
                  </ul>
                  <li>users</li>
                    <ul>
                    <li>user</li>
                      <ul>
                      <li>userId</li>
                      <li>userName</li>
                      <li>userGroup</li>
                      <li>socialGroups</li>
                      <li>startTag</li>
                      <li>endTag</li>
                      <li>status</li>
                      <li>typing</li>
                    </ul>
                  </ul>
                </ul>
              </ul>
              <li>errortext</li>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Get Rooms (~/api/getRooms.php)</h2>
        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>showDeleted - Will attempt to show deleted rooms, assuming the user has access to them (that is, is an administrator). Defaults to false.</li>

            <li>showPrivate - Will show any private rooms of the user. Defaults to true.</li>

            <li>order - How the rooms should be ordered.</li>
            <ul>
              <li>id - ID (Default)</li>
              <li>name - Name</li>
              <li>vrim - VRIM Common Sort (Official -> Nonofficial -> Private)</li>
            </ul>

            <li>orderReverse - If true the above search will be descending, not ascending.</li>

            <li>rooms - If specified, only specific rooms are listed. By default, all rooms are listed.</li>
          </ul>
        </section>

        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>getRooms</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
                <li>order</li>
                <li>showDeleted</li>
              </ul>
              <li>errorStr</li>
              <li>errorDesc</li>
              <li>rooms</li>
                <ul>
                <li>room</li>
                  <ul>
                  <li>roomId</li>
                  <li>roomName</li>
                  <li>roomTopic</li>
                  <li>roomOwner</li>
                  <li>allowedUsers</li>
                  <li>allowedGroups</li>
                  <li>moderators</li>
                  <li>favorite</li>
                  <li>options</li>
                  <li>optionDefinitions</li>
                    <ul>
                    <li>official</li>
                    <li>deleted</li>
                    <li>hidden</li>
                    <li>privateIm</li>
                  </ul>
                  <li>bbcode</li>
                </ul>
              </ul>
              <li>errortext</li>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Get Active Users from All Rooms (~/api/getAllActiveUsers.php)</h2>
        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>onlineThreshold - The period of time after which a user is no longer “active”.</li>
          </ul>
        </section>

        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>getAllActiveUsers</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
                <li>onlineThreshold</li>
                <li>time</li>
              </ul>
              <li>errorStr</li>
              <li>errorDesc</li>
              <li>users</li>
                <ul>
                <li>user</li>
                  <ul>
                  <li>userData</li>
                    <ul>
                    <li>userId</li>
                    <li>userName</li>
                    <li>startTag</li>
                    <li>endTag</li>
                  </ul>
                  <li>rooms</li>
                    <ul>
                    <li>room</li>
                      <ul>
                      <li>roomId</li>
                      <li>roomName</li>
                    </ul>
                  </ul>
                </ul>
              </ul>
              <li>errortext</li>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Get Rooms (~/api/getRooms.php)</h2>
        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>rooms - A comma-seperated list of room IDs to get. If not specified, all rooms will be obtained.</li>
            <li>showDeleted - If the user has permission, rooms that are deleted will also be retrieved.</li>
            <li>reverseOrder - A comma-seperated list of room IDs to get. If not specified, all rooms will be obtained.</li>
            <li>permLevel - Rooms will only be obtained if the user has this permission in regards to them.</li>
            <ul>
              <li>post - The user can post in the room.</li>
              <li>view - The user can see posts made in the room.</li>
              <li>moderate - The user can perform moderation on the room, such as deleting posts from within it.</li>
              <li>know - The user is able to know of the room's existence. Depending on the product configuration, nearly all users may have this priviledge.</li>
              <li>admin - The user is able to perform administrative tasks on the room, such as deleting it. Only admins and room owners have this priviledge.</li>
            </ul>
          </ul>
        </section>

        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>getRooms</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
                <li>order</li>
                <li>showDeleted</li>
              </ul>
              <li>errStr</li>
              <li>errDesc</li>
              <li>rooms</li>
                <ul>
                <li>room</li>
                  <ul>
                  <li>roomId</li>
                  <li>roomName</li>
                  <li>roomTopic</li>
                  <li>roomOwner</li>
                  <li>allowedUsers</li>
                  <li>allowedGroups</li>
                  <li>moderators</li>
                  <li>favorite</li>
                  <li>options</li>
                  <li>optionDefinitions</li>
                    <ul>
                    <li>official</li>
                    <li>mature</li>
                    <li>deleted</li>
                    <li>hidden</li>
                    <li>privateIm</li>
                  </ul>
                  <li>bbcode</li>
                  <li>permissions</li>
                    <ul>
                    <li>canModerate</li>
                    <li>canAdmin</li>
                    <li>canPost</li>
                    <li>canView</li>
                    <li>canKnow</li>
                  </ul>
                </ul>
              </ul>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Get Users (~/api/getUsers.php)</h2>

        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>users - A comma-seperated list of user IDs to get. If not specified, all users will be obtained.</li>
            <li>order - The method of sorting the users.</li>
            <ul>
              <li>userId - The user's ID.</li>
              <li>userName - The user's name.</li>
            </ul>
          </ul>
        </section>

        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>getUsers</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
                <li>order</li>
              </ul>
              <li>errStr</li>
              <li>errDesc</li>
              <li>users</li>
                <ul>
                <li>user</li>
                  <ul>
                  <li>userName</li>
                  <li>userId</li>
                  <li>userGroup</li>
                  <li>avatar</li>
                  <li>profile</li>
                  <li>socialGroups</li>
                  <li>startTag</li>
                  <li>endTag</li>
                  <li>defaultFormatting</li>
                    <ul>
                    <li>color</li>
                    <li>highlight</li>
                    <li>fontface</li>
                    <li>general</li>
                  </ul>
                  <li>favRooms</li>
                  <li>ignoreList</li>
                  <li>postCount</li>
                  <li>joinDate</li>
                  <li>joinDateFormatted</li>
                  <li>userTitle</li>
                </ul>
              </ul>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Upload File (~/api/uploadFile.php)</h2>

      </section>

      <section>
        <h2>Set Status (~/api/setStatus.php)</h2>

      </section>

      <section>
        <h2>Get Room Stats (~/api/getStats.php)</h2>
        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>rooms - A comma-seperated list of room IDs to get.</li>
            <li>number - The number of ranks to get.</li>
          </ul>
        </section>

        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>getStats</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
                <li>rooms</li>
                <li>resultLimit</li>
              </ul>
              <li>errStr</li>
              <li>errDesc</li>
              <li>roomStats</li>
                <ul>
                <li>room</li>
                  <ul>
                  <li>roomData</li>
                    <ul>
                    <li>roomId</li>
                    <li>roomName</li>
                  </ul>
                  <li>users</li>
                    <ul>
                    <li>user</li>
                      <ul>
                      <li>userData</li>
                        <ul>
                        <li>userId</li>
                        <li>userName</li>
                        <li>startTag</li>
                        <li>endTag</li>
                      </ul>
                      <li>messageCount</li>
                      <li>position</li>
                    </ul>
                  </ul>
                </ul>
              </ul>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Get Censor Lists (~/api/getCensorLists.php)</h2>

        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>room - A room to get list status on.</li>
          </ul>
        </section>

        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>getCensorLists</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
                <li>roomId</li>
              </ul>
              <li>errStr</li>
              <li>errDesc</li>
              <li>lists</li>
                <ul>
                <li>list</li>
                  <ul>
                  <li>listId</li>
                  <li>listName</li>
                  <li>listType</li>
                  <li>listOptions</li>
                </ul>
              </ul>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Get Kicks (~/api/getKicks.php)</h2>

        <section>
          <h3>Directives</h3>
          <ul class="directives">
            <li>rooms - A comma-seperated list of room IDs to get.</li>
            <li>users - A comma-seperated list of user IDs to get.</li>
          </ul>
        </section>

        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>getKicks</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
                <li>rooms</li>
                <li>users</li>
              </ul>
              <li>errStr</li>
              <li>errDesc</li>
              <li>kicks</li>
                <ul>
                <li>kick</li>
                  <ul>
                  <li>roomData</li>
                    <ul>
                    <li>roomId</li>
                    <li>roomName</li>
                  </ul>
                  <li>userData</li>
                    <ul>
                    <li>userId</li>
                    <li>userName</li>
                    <li>userFormatStart</li>
                    <li>userFormatEnd</li>
                  </ul>
                  <li>kickerData</li>
                    <ul>
                    <li>userId</li>
                    <li>userName</li>
                    <li>userFormatStart</li>
                    <li>userFormatEnd</li>
                  </ul>
                  <li>length</li>
                  <li>set</li>
                  <li>setFormatted</li>
                  <li>expires</li>
                  <li>expiresFormatted</li>
                </ul>
              </ul>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Get Server Status (~/api/getServerStatus.php)</h2>

        <section>
          <h3>Directives</h3>

          <ul class="directives">
            <li>rooms - A comma-seperated list of room IDs to get.</li>
            <li>users - A comma-seperated list of user IDs to get.</li>
          </ul>
        </section>

        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>getServerStatus</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
              </ul>
              <li>errStr</li>
              <li>errDesc</li>
              <li>serverStatus</li>
                <ul>
                <li>fim_version</li>
                <li>installedPlugins</li>
                  <ul>
                </ul>
                <li>requestMethods</li>
                  <ul>
                  <li>longPoll</li>
                  <li>poll</li>
                  <li>push</li>
                </ul>
                <li>fileUploads</li>
                  <ul>
                  <li>enabled</li>
                  <li>generalEnabled</li>
                  <li>maxSize</li>
                  <li>maxAll</li>
                  <li>maxUser</li>
                  <li>extensions</li>
                </ul>
                <li>outputBuffer</li>
                  <ul>
                  <li>comressOutput</li>
                </ul>
                <li>phpVersion</li>
              </ul>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Get Uploads (~/api/getUploads.php)</h2>

        <section>
          <h3>Directives</h3>

          <ul class="directives">
            <li>users - A comma-seperated list of user IDs to get.</li>
          </ul>
        </section>

        <section>
          <h3>XML Tree</h3>
          <ul>
            <li>getUploads</li>
              <ul>
              <li>activeUser</li>
                <ul>
                <li>userId</li>
                <li>userName</li>
              </ul>
              <li>sentData</li>
                <ul>
                <li>users</li>
              </ul>
              <li>errStr</li>
              <li>errDesc</li>
              <li>uploads</li>
                <ul>
                <li>upload</li>
                  <ul>
                  <li>size</li>
                  <li>sizeFormatted</li>
                  <li>name</li>
                  <li>mime</li>
                  <li>rating</li>
                  <li>md5hash</li>
                </ul>
              </ul>
            </ul>
          </ul>
        </section>
      </section>

      <section>
        <h2>Moderate (~/api/moderate.php)</h2>
        --Incomplete--

      </section>
    </section>

    <footer style="text-align: right;">
      <span style="font-style: oblique;">Document Like You Were Dieing<br />
      (and hope someone decides to continue your legacy)</span>
    </footer>
  </body>
</html>